#ifndef LAPACK_H
#define	LAPACK_H

#include "../Profiler.h"

struct Lapack {
    virtual int saxpy(int *n, float *sa, float *sx, int *incx, 
	float *sy, int *incy);
    
    virtual int scopy(int *n, float *sx, int *incx, float *sy, 
	int *incy);
    
    virtual float sdot(int *n, float *sx, int *incx, float *sy, int *incy);
    
    virtual int sgemm(char *transa, char *transb, int *m, int *
	n, int *k, float *alpha, float *a, int *lda, float *b, int *
	ldb, float *beta, float *c__, int *ldc);
    
    virtual int sgemv(char *trans, int *m, int *n, float *alpha, 
	float *a, int *lda, float *x, int *incx, float *beta, float *y, 
	int *incy);
    
    virtual int sger(int *m, int *n, float *alpha, float *x, 
	int *incx, float *y, int *incy, float *a, int *lda);
    
    virtual int slarf(char *side, int *m, int *n, float *v, 
	int *incv, float *tau, float *c__, int *ldc, float *work);
    
    virtual int slarfb(char *side, char *trans, char *direct, char *
	storev, int *m, int *n, int *k, float *v, int *ldv, 
	float *t, int *ldt, float *c__, int *ldc, float *work, int *
	ldwork);
    
    virtual int slarfg(int *n, float *alpha, float *x, int *incx, 
	float *tau);
    
    virtual int slarft(char *direct, char *storev, int *n, int *
	k, float *v, int *ldv, float *tau, float *t, int *ldt);
    
    virtual int slatrd(char *uplo, int *n, int *nb, float *a, 
	int *lda, float *e, float *tau, float *w, int *ldw);
    
    virtual float snrm2(int *n, float *x, int *incx);
    
    virtual int sorg2l(int *m, int *n, int *k, float *a, 
	int *lda, float *tau, float *work, int *info);
    
    virtual int sorg2r(int *m, int *n, int *k, float *a, 
	int *lda, float *tau, float *work, int *info);
    
    virtual int sorgql(int *m, int *n, int *k, float *a, 
	int *lda, float *tau, float *work, int *lwork, int *info);
    
    virtual int sorgqr(int *m, int *n, int *k, float *a, 
	int *lda, float *tau, float *work, int *lwork, int *info);
    
    virtual int sorgtr(char *uplo, int *n, float *a, int *lda, 
	float *tau, float *work, int *lwork, int *info);
        
    virtual int sscal(int *n, float *sa, float *sx, int *incx);
    
    virtual int ssymv(char *uplo, int *n, float *alpha, float *a, 
	int *lda, float *x, int *incx, float *beta, float *y, int *
	incy);
    
    virtual int ssyr2(char *uplo, int *n, float *alpha, float *x, 
	int *incx, float *y, int *incy, float *a, int *lda);
    
    virtual int ssyr2k(char *uplo, char *trans, int *n, int *k, 
	float *alpha, float *a, int *lda, float *b, int *ldb, float *beta, 
	 float *c__, int *ldc);
    
    virtual int ssytd2(char *uplo, int *n, float *a, int *lda, 
	float *d__, float *e, float *tau, int *info);
    
    virtual int ssytrd(char *uplo, int *n, float *a, int *lda, 
	float *d__, float *e, float *tau, float *work, int *lwork, int *
	info);
    
    virtual int strmm(char *side, char *uplo, char *transa, char *diag, 
	int *m, int *n, float *alpha, float *a, int *lda, float *b, 
	int *ldb);
    
    virtual int strmv(char *uplo, char *trans, char *diag, int *n, 
	float *a, int *lda, float *x, int *incx);
			
	virtual int sstein(int *n, float *d__, float *e, int *m, float 
	*w, int *iblock, int *isplit, float *z__, int *ldz, float *
	work, int *iwork, int *ifail, int *info);
	
	virtual int slaruv(int *iseed, int *n, float *x);
	
	virtual double sasum(int *n, float *sx, int *incx);
		
	virtual int isamax(int *n, float *sx, int *incx);
	
	virtual int ilaslc(int *m, int *n, float *a, int *lda);

	virtual int ilaslr(int *m, int *n, float *a, int *lda);

	virtual int slacpy(char *uplo, int *m, int *n, float *a, int *lda, float *b, int *ldb);

	virtual int slae2_(float *a, float *b, float *c__, float *rt1, float *rt2);

	virtual int slaebz(int *ijob, int *nitmax, int *n, int *mmax, int *minp, int *nbmin, float *abstol, float *reltol, float *pivmin, float *d__, float *e, float *e2, int *nval, float *ab, float *c__, int *mout, int *nab, float *work, int *iwork, int *info);

	virtual int slaev2_(float *a, float *b, float *c__, float *rt1, float *rt2, float *cs1, float *sn1);

	virtual int slagtf(int *n, float *a, float *lambda, float *b, float *c__, float *tol, float *d__, int *in, int *info);

	virtual int slagts(int *job, int *n, float *a, float *b, float *c__, float *d__, int *in, float *y, float *tol, int *info);

	virtual double slanst(char *norm, int *n, float *d__, float *e);

	virtual double slansy(char *norm, char *uplo, int *n, float *a, int *lda, float *work);

	virtual int slarnv(int *idist, int *iseed, int *n, float *x);

	virtual int slartg(float *f, float *g, float *cs, float *sn, float *r__);

	virtual int slascl(char *type__, int *kl, int *ku, float *cfrom, float *cto, int *m, int *n, float *a, int *lda, int *info);

	virtual int slaset(char *uplo, int *m, int *n, float *alpha, float *beta, float *a, int *lda);

	virtual int slasr(char *side, char *pivot, char *direct, int *m, int *n, float *c__, float *s, float *a, int *lda);

	virtual int slasrt(char *id, int *n, float *d__, int *info);

	virtual int slassq(int *n, float *x, int *incx, float *scale, float *sumsq);

	virtual int sorm2l(char *side, char *trans, int *m, int *n, int *k, float *a, int *lda, float *tau, float *c__, int *ldc, float *work, int *info);

	virtual int sorm2r(char *side, char *trans, int *m, int *n, int *k, float *a, int *lda, float *tau, float *c__, int *ldc, float *work, int *info);

	virtual int sormql(char *side, char *trans, int *m, int *n, int *k, float *a, int *lda, float *tau, float *c__, int *ldc, float *work, int *lwork, int *info);

	virtual int sormqr(char *side, char *trans, int *m, int *n, int *k, float *a, int *lda, float *tau, float *c__, int *ldc, float *work, int *lwork, int *info);

	virtual int sormtr(char *side, char *uplo, char *trans, int *m, int *n, float *a, int *lda, float *tau, float *c__, int *ldc, float *work, int *lwork, int *info);

	virtual int sstebz(char *range, char *order, int *n, float *vl, float *vu, int *il, int *iu, float *abstol, float *d__, float *e, int *m, int *nsplit, float *w, int *iblock, int *isplit, float *work, int *iwork, int *info);

	virtual int ssteqr(char *compz, int *n, float *d__, float *e, float *z__, int *ldz, float *work, int *info);

	virtual int ssterf(int *n, float *d__, float *e, int *info);

	virtual int ssyevx(char *jobz, char *range, char *uplo, int *n, float *a, int *lda, float *vl, float *vu, int *il, int *iu, float *abstol, int *m, float *w, float *z__, int *ldz, float *work, int *lwork, int *iwork, int *ifail, int *info);
	
	virtual int sswap(int *n, float *sx, int *incx, float *sy, int *incy);
    
    virtual ~Lapack() { }
};

#endif	/* LAPACK_H */

